package view;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

import listener.FrameSchliessen;
import model.MenueModel;
import tcpVerbindung.TCPAuswEmpf;
import tcpVerbindung.TCPAuswSenden;
import tcpVerbindung.TCPSendenEmpf;
import controller.MenueController;
import datenbank.Initialisierung;

/**
 * 
 * Main Klasse
 * 
 * @date 16.12.2011
 * @author rs
 * @version 1.0
 * 
 */
public class Main {

	static Initialisierung initialisierung;
	
	public static JFrame frame;
	static MenueController menueController;
	static MenueModel menueModel;
	static JPanel menueLinks;
	static JPanel verwCenter;
	static JMenuBar menueOben;
	static JPanel dialoge;

	static FrameSchliessen frameSchliessen;

	static TCPAuswEmpf tcpAuswEmpf; // Fuer PropertyChangeListener in Menue
									// model einfuegen
	static TCPAuswSenden tcpAuswSenden; // Fuer PropertyChangeListener in
										// MenueController einfuegen

	public static Thread tcpVerbindung;

	/**
	 * Konstruktor
	 */
	public Main() {
		
		tcpAuswEmpf = new TCPAuswEmpf();
		tcpAuswSenden = new TCPAuswSenden(tcpAuswEmpf);

		menueModel = new MenueModel(tcpAuswEmpf,initialisierung, tcpAuswSenden);
		menueController = new MenueController(menueModel, tcpAuswSenden);

		menueOben = new MenuOben(menueController);
		
		frame = new JFrame("Elesta Messplatz");
		frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
		frame.addWindowListener(new FrameSchliessen(this, menueController));

		frame.setPreferredSize(new Dimension(1024, 768));

		menueLinks = new MenueLinks(menueController);
		verwCenter = new VerwCenter(menueController, initialisierung);

		frame.add(verwCenter, BorderLayout.CENTER);
		frame.add(menueLinks, BorderLayout.WEST);
		
		frame.setJMenuBar(menueOben);

		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				frame.pack();

				frame.setLocationRelativeTo(null); // in der mitte

				frame.setVisible(true);
			}
		});

		tcpVerbindung = new TCPSendenEmpf(tcpAuswEmpf, tcpAuswSenden);

		// TCP Verbdindung starten
		tcpVerbindung.setName("TCP");
		tcpVerbindung.start();

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// Datenbank initialisieren
		initialisierung = new Initialisierung();

		new Main();

	}
}
